home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / data / shaders / hmatte.sl < prev    next >
Text File  |  1992-09-22  |  874b  |  40 lines

  1. surface
  2. hmatte(
  3.     float Ka    = 0.05,
  4.         Kd    = 1;
  5.     )
  6. {
  7.     float    Lhw,Nhw;    /* w-cord of hyperbolic normal vector to P */
  8.     point    Nh, Lh;    /* first 3 cords of hyperbolic normal vector to P */
  9.     point   Px;
  10.     float    b,d,nn;
  11.  
  12.     Nh = faceforward(normalize(N),I);
  13.     Px = transform("shader",P);
  14.  
  15.     /* compute plane equation */
  16.     Ci = 0;
  17.     illuminance(Px)
  18.     {
  19.     Nhw = Px.Nh;
  20.     b = -(L.Px - 0)/(Px.Px - 1);
  21.     Lh = L + b*Px;        /* hyperbolic light vector is lin comb of L,P */
  22.     Lhw = 0 + b;
  23.     d = (Lh.Nh - Lhw*Nhw)/sqrt(abs((Lh.Lh - Lhw*Lhw)*(Nh.Nh - Nhw*Nhw)));
  24.  
  25.     if (d < 0.0)    d = -d;
  26.     if (d > 1.0)    {
  27. /*
  28.         printf("Light:%f %f %f %f\n",xcomp(Lh),ycomp(Lh),zcomp(Lh),Lhw);
  29.         printf("Normal:%f %f %f %f\n",xcomp(Nh),ycomp(Nh),zcomp(Nh),Nhw);
  30.         printf("Posi:%f %f %f 1.0\n",xcomp(Px),ycomp(Px),zcomp(Px));
  31. */
  32.         d = 1.0; 
  33.         }
  34.  
  35.     Ci += Os * Cs * (Ka*ambient() + Cl*Kd*d );
  36.     }
  37.     Oi = Os;
  38. }        
  39.     
  40.